#include <iostream>
#include <vector>
using namespace std;

namespace Mystack
{
	template <class T>
	class stack
	{
	public:
		stack() {};
		void push(const T& val)
		{
			st.push_back(val);
		}
		bool empty()
		{
			return st.empty();
		}
		size_t size()
		{
			return st.size();
		}
		T& top()
		{
			return st.back();
		}
		const T top()const
		{
			return st.front();
		}
		void pop()
		{
			st.pop_back();
		}
	private:
		vector<T> st;
	};
}

namespace Myqueue
{
	template<class T>
	class queue
	{
	public:
		queue(){}
		bool empty()
		{
			return qu.empty();
		}
		size_t size()
		{
			return qu.size();
		}
		T& front()
		{
			return qu.front();
		}
		T& back()
		{
			return qu.back();
		}
		void push(const T& val)
		{
			qu.push_back(val);
		}
		void pop()
		{
			qu.erase(qu.begin());
		}
	private:
		vector<T> qu;
	};
}

void TestStack()
{
	using namespace Mystack;
	stack<int> st;
	st.push(1);
	st.push(3);
	st.push(4);
	st.push(7);
	st.push(2);
	st.push(5);
	/*for (int i = 0; i < 6; i++)
	{
		cout << st.top() << " ";
		st.pop();
	}*/
	/*for (int i = 0; i < 6; i++)
	{
		cout << st.size() << " ";
		st.pop();
	}*/
	while (!st.empty())
	{
		cout << st.top() << " ";
		st.pop();
	}
	cout << endl;
}

void TestQueue()
{
	using namespace Myqueue;
	queue<int> qu;
	qu.push(1);
	qu.push(3);
	qu.push(4);
	qu.push(2);
	qu.push(6);
	qu.push(4);
	qu.push(8);

	while (!qu.empty())
	{
		cout << qu.front() << " ";
		qu.pop();
	}
	cout << endl;
}

//int main()
//{
//	//TestStack();
//	TestQueue();
//	return 0;
//}